#ifndef algoritmosDirectoryEntries_h
#define algoritmosDirectoryEntries_h

/**
 Devuelve la LongDirectoryEntry y la DirectoryEntry de un archivo
 mediante su PATH.
 */
uint8_t obtenerEntradaAPartirDePATH(const char * path,tDirectoryEntries * entradasDelArchivo);

/**
 Devuelve la lista de entradas de directorio pertenecientes a un
 directorio, recibiendo solo el clusters de inicio de dicho directorio.
 */
tListaEntradasDeDirectorios * cargarListaDeEntradasAPartirDe(uint32_t nroCluster);

void entradaDeRootDirectory(tDirectoryEntry * entradaDelDirectorioRaiz);

tListaEntradasDeDirectorios * obtenerListaDelRootDirectory();

void borrarListasDeEntradas(tListaEntradasDeDirectorios ** listaDeEntries);

/**
Devuelve el nombre de un archivo mediante sus entradas de directorio
(todavia falta su completa funcionalidad, se debe solucionar el problema
con nombres mayores a 5 caracteres)
 */
int32_t nombreDelDirectorio(tListaEntradasDeDirectorios * nodoDeLaLista,char *);

uint8_t reemplazarEntradaDelArchivo(char * path,tDirectoryEntries* entradasDelArchivoActualizadas);

uint32_t agregarDirectoryEntry(char * path,tDirectoryEntries * directoryAAgregar);

uint32_t buscarDirectoryEntriesLibres(tCluster * contenidoCluster,uint32_t cantidadEntradas);

uint32_t renombrarEntradas(char nombreNuevo[],tDirectoryEntries * entradaDir);

uint32_t agregarEntradasRelativas(tCluster * contenidoCluster,uint32_t nroPadre,uint32_t nroActual);

unsigned char lfn_checksum(const unsigned char *pFcbName);


#endif
